home *** CD-ROM | disk | FTP | other *** search
/ PC User 2003 December / Australian PC User - December 2003 (CD2).iso / software / apps / files / dwmx2k4.exe / Disk1 / data1.cab / Configuration_En / Commands / Export Table.js < prev    next >
Encoding:
JavaScript  |  2003-09-05  |  7.5 KB  |  289 lines

  1. //
  2. // Copyright 2000, 2001, 2002, 2003 Macromedia, Inc. All rights reserved. 
  3. // --------------------------------------------------------------------------
  4. //
  5. // Export Table.js
  6. //
  7. // --------------------------------------------------------------------------
  8.  
  9. //****************** GLOBALS ********************
  10.  
  11. var helpDoc = MM.HELP_cmdExportTable;
  12.  
  13. //****************** API ********************
  14.  
  15. function commandButtons(){
  16.    return new Array(MM.BTN_Export,     "exportTable();window.close()",
  17.                     MM.BTN_Cancel,     "window.close()",
  18.                     MM.BTN_Help,       "displayHelp()" );
  19. }
  20.  
  21. function canAcceptCommand(){
  22.    if (  !site.windowIsFrontmost() && findTable()  )
  23.       return true;
  24.    return false;
  25. }
  26.  
  27. //LOCAL FUNCTIONS
  28.  
  29. //function: getLineBreak
  30. //description: returns line break based on platform
  31.  
  32. function getLineBreak(theForm){
  33.    var retVal;
  34.    var selInd = theForm.WhichPlatform.selectedIndex;
  35.  
  36.    switch (selInd){
  37.       case 0:
  38.          retVal = "\r\n";
  39.          break;
  40.       case 1:
  41.          retVal = "\r";
  42.          break;
  43.       case 2:
  44.          retVal = "\n";
  45.          break;
  46.    }
  47.    
  48.    return retVal;
  49.  
  50. }
  51.  
  52. //function: getDelimiter
  53. //description: returns delimiter based on form parameters
  54.  
  55. function getDelimiter(theForm){
  56.    var retVal;
  57.    var selInd = theForm.Delimiter.selectedIndex;
  58.  
  59.    switch (selInd){
  60.       case 0:
  61.          retVal = "\t";
  62.          break;
  63.       case 1:
  64.          retVal = " ";
  65.          break;
  66.       case 2:
  67.          retVal = ",";
  68.          break;
  69.       case 3:
  70.          retVal = ";";
  71.          break;
  72.       case 4:
  73.          retVal = ":";
  74.          break;
  75.    }
  76.    return retVal;
  77. }
  78.  
  79. //function: findTable
  80. //description: returns tableObject that insertion point is in
  81. //returns an empty string if IP not in table
  82.  
  83. function findTable(){
  84.   var tableObj="";
  85.   var theDoc = dw.getDocumentDOM();
  86.   
  87.   if (!theDoc) return null;
  88.   
  89.   var selArr = theDoc.getSelection();
  90.   // make sure we have a valid selection array
  91.   if (selArr.length != 2) return null;
  92.   // get the selected object
  93.   var selObj = theDoc.offsetsToNode(selArr[0],selArr[1]);
  94.  
  95.   while (tableObj=="" && selObj.parentNode){
  96.     if (selObj.nodeType == Node.ELEMENT_NODE && selObj.tagName=="TABLE")
  97.       tableObj=selObj;
  98.     else
  99.       selObj = selObj.parentNode;
  100.   }
  101.   return tableObj;
  102. }
  103.  
  104. //function:initializeUI
  105. //description: sets default line breaks based on platform.
  106. //Loads select lists with localized text strings.
  107.  
  108. function initializeUI(){
  109.    var theForm = document.forms[0];
  110.    var selPlatform = theForm.WhichPlatform;
  111.    var selDelimiter = theForm.Delimiter;
  112.  
  113.    //load select widgets
  114.    loadSelectList(selPlatform,OPTIONS_Platforms);
  115.    loadSelectList(selDelimiter,OPTIONS_Delimiters);
  116.  
  117.    //change default line break type based on platform
  118.    if (navigator.platform == "MacPPC")
  119.       selPlatform.selectedIndex = 1;
  120.  
  121. }
  122.  
  123.  
  124. //function: exportOneRow
  125. //description: called from exportTable or exportRows
  126. //exports single row of html table
  127.  
  128. function exportOneRow(tableRow, delimiter, lineBreak){
  129.    var exportData = "";
  130.    var tableCells = tableRow.childNodes;
  131.    var nCells = tableCells.length;
  132.    var i;
  133.    for (i=0;i<nCells;i++){
  134.       exportData += addQualifiers(getTextNode(tableCells.item(i)), delimiter);
  135.       exportData += delimiter;
  136.    }
  137.    return exportData.substring(0,exportData.length-1) + lineBreak;   
  138. }
  139.  
  140. //function: exportRows
  141. //description: called from exportTable
  142. //exports several rows of html table - children of 
  143. //thead, tbody or tfoot section
  144.  
  145. function exportRows(tableSection, delimiter, lineBreak){
  146.    var exportData = "";
  147.    var tableRows = tableSection.childNodes;
  148.    var nRows = tableRows.length;
  149.    var i;
  150.    for (i=0;i<nRows;i++){
  151.       if (tableRows.item(i).tagName=="TR")
  152.          exportData += exportOneRow(tableRows.item(i), delimiter, lineBreak);
  153.    }
  154.    return exportData;
  155. }
  156.  
  157. //function: exportTable
  158. //description: called from Export button
  159. //exports tabular table based on html table
  160.  
  161. function exportTable(){
  162.    var exportData = "";
  163.    var footData = "";
  164.    var theForm = document.forms[0];
  165.    var currTable = findTable();
  166.    var lineBreak = getLineBreak(theForm);
  167.    var delimiter = getDelimiter(theForm);
  168.    var tableChildren = currTable.childNodes;
  169.    var nChildren = tableChildren.length;
  170.    var i;
  171.    var footChild = -1;
  172.  
  173.    for (i=0; i < nChildren; i++) {
  174.       if (tableChildren.item(i).tagName == "THEAD" || tableChildren.item(i).tagName == "TBODY") {
  175.          exportData += exportRows(tableChildren.item(i), delimiter, lineBreak);
  176.       }
  177.       else if (tableChildren.item(i).tagName == "TFOOT") {
  178.          footData += exportRows(tableChildren.item(i), delimiter, lineBreak);
  179.       }
  180.       else if (tableChildren.item(i).tagName == "TR") {
  181.          exportData += exportOneRow(tableChildren.item(i), delimiter, lineBreak);
  182.       }
  183.    }
  184.    exportData += footData;
  185.    writeToFile(exportData);
  186. }
  187.  
  188.  
  189. //function: writeToFile
  190. //description: writes data to a user specified file
  191. //Arguments:
  192. //exportData = text string to write to a file
  193.  
  194. function writeToFile(exportData){
  195.    var filePath = dw.browseForFileURL("save",LABEL_ExportAs); //determine file path
  196.    var index;
  197.  
  198.    if (!filePath) {
  199.       alert(ERROR_No_Save_Path);
  200.       return;
  201.    }
  202.  
  203.    index = filePath.lastIndexOf(".")
  204.    if (index == -1 || (filePath.length - index)!=4 )
  205.       filePath += ".csv"
  206.    //save file
  207.    DWfile.write(filePath,exportData,"write","utf-8");
  208. }
  209.  
  210.  
  211. //function: addQualifiers
  212. //description: In a delimited file, quotes should be wrapped
  213. //around any data containing double quotes, commas, or a delimiter.
  214. //This function is two fold: One, wrap quotes around any of the
  215. //above listed items. Two, surround any double quotes with double quotes.
  216. //Examples:
  217. //text from table cell  ->  how it should appear in exported file
  218. //Doe, Jane                  "Doe, Jane"
  219. //My name is "Sue"           "My name is ""Sue"""
  220. //Arguments:
  221. //cellData - text string representing text content of table cell
  222. //delimiter - character used to separate data
  223.  
  224. function addQualifiers(cellData,delimiter){
  225.    
  226.    var dataLen = cellData.length;
  227.    var qualifier = '"'   //qualifier is double quotes
  228.    var counter=0;
  229.    var i; 
  230.    var currChar;
  231.    var bSurroundWithQualifier = false;
  232.    
  233.    //precede all double quotes (") with another, so:
  234.    //  " --> ""
  235.    cellData = cellData.replace(/"/g, '""'); 
  236.  
  237.    //surround any word containing comma,quotes,or delimiters with double quotes
  238.    dataLen = cellData.length;
  239.    
  240.    for (i=0;i<dataLen;i++){
  241.       if (  cellData.charAt( i ) == "," ||
  242.             cellData.charAt( i ) == qualifier  ||
  243.             cellData.charAt( i ) == delimiter ){
  244.       
  245.                bSurroundWithQualifier = true;
  246.                break;
  247.             }
  248.    }
  249.    
  250.    if (bSurroundWithQualifier)
  251.       cellData = qualifier + cellData + qualifier;
  252.       
  253.    return cellData;
  254.  
  255. }
  256.  
  257. //function: getTextNode
  258. //description: returns the text from a table cell
  259. //returns only the text and not the html markup
  260. //Arguments:
  261. //tableCellObj - a TD object
  262. //Returns:
  263. //the text from that table cell
  264.  
  265. function getTextNode(tableCellObj){
  266.   var iter=tableCellObj.childNodes;
  267.   var counter=0;
  268.   var child=iter.item(counter);
  269.   var retVal="";
  270.  
  271.   while (child) {
  272.     retVal+=getTextNode(child);
  273.     child=iter.item(++counter);
  274.   }
  275.  
  276.   if (tableCellObj.nodeType == Node.TEXT_NODE)
  277.     retVal+=tableCellObj.data;
  278.  
  279.   // Replace white space 
  280.   retVal = retVal.replace(/\s+/gi,' ');
  281.   retVal = retVal.replace(/^\s+/,'');
  282.   retVal = retVal.replace(/\s+$/,'');
  283.  
  284.   return retVal;
  285. }
  286.  
  287. //GENERIC FUNCTIONS
  288. //loadSelectList()
  289.